package com.wjm.servlet;

import com.wjm.http.HttpRequest;
import com.wjm.http.HttpResponse;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * Data:2022年08月15日
 * Author:wjm
 * Content:
 *
 *   根据javaEE（企业级应用开发）的标准开发规范，设定业务处理的类都应该是一个具体的服务端应用程序
 *   这样的应用程序就被称为servlet
 *   按照开发的规范，业务处理都是在service方法中实现的
 *   数据的获取是通过 封装了客户端请求信息的HttpRequest对象
 *   数据的响应是通过 封装了服务费响应信息的HttpResponse对象
 *
 *   其实在javaEE中，Servlet是一个标准的接口
 *
 *   该类是用来处理登入请求的
 *
 */
public class LoginServlet {

    public void service(HttpResponse response, HttpRequest request) {
        //获取用户输入的数据
        String username = request.getParameters("user");
        String password = request.getParameters("pwd");

        //判断用户输入是否为空
        if (username != null || password != null){
            try {
                //创建读取文件的对象
                try(RandomAccessFile raf = new RandomAccessFile("user.txt","r")){
                    //设置一个长度为32的字节数组用来读取文件中的用户名和密码
                    byte[] data = new byte[32];
                    //遍历文件中的所有用户名
                    for (int i=0;i<raf.length()/100;i++){
                        //设置指针位置
                        raf.seek(i*100);
                        raf.read(data);
                        //将读取到内容转为字符串，并且去除空字符
                        String name = new String(data,"utf-8").trim();
                        //判断输入的用户名是否存在
                        if (username.equals(name)){//存在就继续判断密码是否正确
                            /*
                                因为我们当初存用户注册信息的时候，每个用户都是分配100字节
                                其中用户名和密码都是以32字节存入文件的，当程序运行到这里的
                                时候，说明当前指针应该刚刚读完用户名的32个字节，现在指针在
                                ，密码的32个字节的开始处，所以我们接着读32个字节就是密码了
                            */
                            //读取密码
                            raf.read(data);
                            String pwd = new String(data,"utf-8").trim();
                            //判断密码是否一致
                            if (password.equals(pwd)){
                                //返回登入成功
                                File file = new File("./webapps/myweb/login_success.html");
                                //将文件传给HttpResponse响应
                                response.setFileEntity(file);
                                //结束结束运行
                                return;

                            }else {
                                //用户名存在，密码错误，返回错误页面
                                File file = new File("./webapps/myweb/login_error.html");
                                //将文件传给HttpResponse响应
                                response.setFileEntity(file);
                                //结束运行
                                return;
                            }

                        }
                    }
                    //运行到这说明没找到用户名，则返回错误页面
                    File file = new File("./webapps/myweb/login_error.html");
                    //将文件传给HttpResponse响应
                    response.setFileEntity(file);


                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }else {
            //输入为空，则返回错误页面
            File file = new File("./webapps/myweb/login_error.html");
            //将文件传给HttpResponse响应
            response.setFileEntity(file);
        }



    }




}
